<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Overview of Interceptors - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">Overview of Interceptors</a></p>
<p class="toc level4"><a href="#gkeck">Interceptor Classes</a></p>
<p class="toc level4"><a href="#gkedy">Interceptor Lifecycle</a></p>
<p class="toc level4"><a href="#gkhsn">Interceptors and Contexts and Dependency Injection for the Java EE Platform</a></p>
</div>
<p class="toc level3 tocsp"><a href="gkedm.html">Using Interceptors</a></p>
<p class="toc level4"><a href="gkedm.html#gkecy">Intercepting Method Invocations</a></p>
<p class="toc level5"><a href="gkedm.html#gkhmh">Using Multiple Method Interceptors</a></p>
<p class="toc level5"><a href="gkedm.html#gkhov">Accessing Target Method Parameters From an Interceptor Class</a></p>
<p class="toc level4 tocsp"><a href="gkedm.html#gkecr">Intercepting Lifecycle Callback Events</a></p>
<p class="toc level5"><a href="gkedm.html#gkhni">Using Multiple Lifecycle Callback Interceptors</a></p>
<p class="toc level4 tocsp"><a href="gkedm.html#gkedu">Intercepting Timeout Events</a></p>
<p class="toc level5"><a href="gkedm.html#gkhla">Using Multiple Timeout Interceptors</a></p>
<p class="toc level3 tocsp"><a href="gkeci.html">The <tt>interceptor</tt> Example Application</a></p>
<p class="toc level4"><a href="gkeci.html#gkedf">Running the <tt>interceptor</tt> Example Application in NetBeans IDE</a></p>
<p class="toc level4"><a href="gkeci.html#gkect">Running the <tt>interceptor</tt> Example Applications Using Ant</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="gkeed.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="gkedm.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gkigq"></a><h2>Overview of Interceptors</h2>
<p>Interceptors are used in conjunction with Java EE managed classes to allow developers
to invoke interceptor methods in conjunction with method invocations or lifecycle events on
an associated <b>target class</b>. Common uses of interceptors are logging, auditing, or profiling.</p>

<p>Interceptors can be defined within a target class as an <b>interceptor method</b>, or
in an associated class called an <b>interceptor class</b>. Interceptor classes contain methods that
are invoked in conjunction with the methods or lifecycle events of the target
class.</p>

<p>Interceptor classes and methods are defined using metadata annotations, or in the deployment
descriptor of the application containing the interceptors and target classes.</p>


<hr><p><b>Note - </b>Applications that use the deployment descriptor to define interceptors are not portable across
Java EE servers.</p>


<hr>
<p>Interceptor methods within the target class or in an interceptor class are annotated
with one of the metadata annotations defined in <a href="#gkecc">Table&nbsp;48-1</a>.</p>

<a name="gkecc"></a><p class="caption">Table&nbsp;48-1 Interceptor Metadata Annotations</p><table><col width="50%"><col width="50%"><tr><th align="left" valign="top" scope="column"><p>Interceptor Metadata Annotation</p>

</th>
<th align="left" valign="top" scope="column"><p>Description</p>

</th>
</tr>
<tr><td align="left" valign="top" scope="row"><p><tt>javax.interceptor.AroundInvoke</tt></p>

</td>
<td align="left" valign="top" scope="row"><p>Designates the
method as an interceptor method.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p><tt>javax.interceptor.AroundTimeout</tt></p>

</td>
<td align="left" valign="top" scope="row"><p>Designates the method as a timeout interceptor, for
interposing on timeout methods for enterprise bean timers.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p><tt>javax.annotation.PostConstruct</tt></p>

</td>
<td align="left" valign="top" scope="row"><p>Designates the method as an interceptor
method for post-construct lifecycle events.</p>

</td>
</tr>
<tr><td align="left" valign="top" scope="row"><p><tt>javax.annotation.PreDestroy</tt></p>

</td>
<td align="left" valign="top" scope="row"><p>Designates the method as an interceptor method for pre-destroy
lifecycle events.</p>

</td>
</tr>
</table>

<a name="gkeck"></a><h3>Interceptor Classes</h3>
<p>Interceptor classes may be designated with the optional <tt>javax.interceptor.Interceptor</tt> annotation, but interceptor
classes aren't required to be so annotated. Interceptor classes <b>must</b> have a public,
no-argument constructor.</p>

<p>The target class can have any number of interceptor classes associated with it.
The order in which the interceptor classes are invoked is determined by the
order in which the interceptor classes are defined in the <tt>javax.interceptor.Interceptors</tt> annotation.
This order can be overridden in the deployment descriptor.</p>

<p>Interceptor classes may be targets of dependency injection. Dependency injection occurs when the
interceptor class instance is created, using the naming context of the associated target
class, and before any <tt>@PostConstruct</tt> callbacks are invoked.</p>



<a name="gkedy"></a><h3>Interceptor Lifecycle</h3>
<p>Interceptor classes have the same lifecycle as their associated target class. When a
target class instance is created, an interceptor class instance is also created for
each declared interceptor class in the target class. That is, if the target
class declares multiple interceptor classes, an instance of each class is created when
the target class instance is created. The target class instance and all interceptor
class instances are fully instantiated before any <tt>@PostConstruct</tt> callbacks are invoked, and any <tt>@PreDestroy</tt>
callbacks are invoked before the target class and interceptor class instances are destroyed.</p>



<a name="gkhsn"></a><h3>Interceptors and Contexts and Dependency Injection for the Java EE Platform</h3>
<p>Contexts and Dependency Injection for the Java EE Platform (CDI) builds on the
basic functionality of Java EE interceptors. For information on CDI interceptors, including a
discussion of interceptor binding types, see <a href="gkhjx.html">Using Interceptors</a>.</p>


         </div>
         <div class="navigation">
             <a href="gkeed.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="gkedm.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

